/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package jhu.profiteer.admin;

import java.io.IOException;
import java.util.Vector;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import jhu.profiteer.data.GameConfigurationParameters;
import jhu.profiteer.data.GameConfigurationParametersJpaController;
import jhu.profiteer.data.exceptions.NonexistentEntityException;

/**
 *
 * @author Jeremy
 */
public class GameConfigurationParametersServlet extends HttpServlet {
   
    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
      String submit = request.getParameter("submit");

      if(null == submit)
      {
        this.getServletContext()
                .getRequestDispatcher("/admin/gcp")
                .forward(request, response);
        return;
      }

      HttpSession session = request.getSession();
      Vector<String> notices = (Vector<String>)session.getAttribute("notices");
      boolean save = true;
      String url = "/admin/gcp";
      Long initialMoney = 0L;
      Long initialLocationId = 0L;
      Long initialFuel = 0L;
      Long initialCargoCapacity = 0L;
      Long fuelCost = 0L;

      String moneyParam = request.getParameter("initialMoney");

      if((null == moneyParam) || moneyParam.isEmpty())
      {
        if(null == notices) notices = new Vector<String>();
        notices.add("You must supply an initial money value.");
        save = false;
      } else initialMoney = Long.parseLong(moneyParam);

      String idParam = request.getParameter("initialLocationId");

      if((null == idParam) || idParam.isEmpty())
      {
        if(null == notices) notices = new Vector<String>();
        notices.add("You must supply an initial location.");
        save = false;
      } else initialLocationId = Long.parseLong(idParam);

      String initFuelParam = request.getParameter("initialFuel");

      if((null == initFuelParam) || initFuelParam.isEmpty())
      {
        if(null == notices) notices = new Vector<String>();
        notices.add("You must supply an initial fuel value.");
        save = false;
      } else initialFuel = Long.parseLong(initFuelParam);

      String cargoParam = request.getParameter("initialCargoCapacity");

      if((null == cargoParam) || cargoParam.isEmpty())
      {
        if(null == notices) notices = new Vector<String>();
        notices.add("You must supply an initial cargo capacity.");
        save = false;
      } else initialCargoCapacity = Long.parseLong(cargoParam);

      String fuelCostParam = request.getParameter("fuelCost");

      if((null == fuelCostParam) || fuelCostParam.isEmpty())
      {
        if(null == notices) notices = new Vector<String>();
        notices.add("You must supply an fuel cost.");
        save = false;
      } else fuelCost = Long.parseLong(fuelCostParam);

      if(save)
      {
        GameConfigurationParameters gcp = new GameConfigurationParameters();
        gcp.setInitialMoney(initialMoney);
        gcp.setInitialLocationId(initialLocationId);
        gcp.setInitialFuel(initialFuel);
        gcp.setInitialCargoCapacity(initialCargoCapacity);
        gcp.setFuelCost(fuelCost);
        GameConfigurationParametersJpaController jc =
                new GameConfigurationParametersJpaController();

        if(submit.equalsIgnoreCase("Create"))
        {
          jc.create(gcp);
        }
        else if(submit.equalsIgnoreCase("Update"))
        {
          try
          {
            GameConfigurationParameters tempGCP = jc.findGameConfigurationParameters();
            gcp.setId(tempGCP.getId());
            jc.edit(gcp);
          }
          catch(NonexistentEntityException ex)
          {
            if(null == notices) notices = new Vector<String>();
            notices.add("No location with that ID exists.");
          }
          catch(Exception ex)
          {
            if(null == notices) notices = new Vector<String>();
            notices.add("Error editing location.");
          }
        }

        if(null != notices) session.setAttribute("notices", notices);
        this.getServletContext().getRequestDispatcher(url).forward(request, response);
      }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
